雖然Redux與React沒有關係,可以用Redux搭配Angular,JQuery甚至原生JavaScript,不過由於React是單向資料流的形式,若要將兩個平行的Component(不具有父子層關係)互相傳遞State非常麻煩,需要不斷的將state提升到共同的父層,而Redux就很好的能夠處理這個麻煩的問題,Redux可以統一管理State,將State拉升到大家共同都能夠繼承到的地方,並且開發時能將UI與資料處理分開,UI交給React Component處理,資料處理就拉到Redux進行。
yarn add redux
yarn add react-redux
在開發React-Redux的專案時,分離Presentational Component與Container Component是非常重要的,可以參考Presentational and Container Components這篇文章,他將這個概念介紹得很清楚,簡單來說Presentational組件負責UI的渲染,他所接收到的資料都來自於props
(組件內沒有state),而Container組件負責數據的處理並將處理完的數據向下傳遞給Presentational組件並選染UI。
...|Presentational Components | Container Component
------------- | -------------
用途|選染UI | 處理數據(更新State)
使用Redux | 否|是
獲取資料|透過props|綁定Redux State
改變資料|從props呼叫callback|dispatch(action)
在介紹完Redux之後,裡用Redux官網的TodoList範例,實際練習一下該如何將Redux與React結合。
記得Presentatiional Component是負責選染UI的組件,下面整理了所需要的Presentational Component與他們所需要的props。
Container Conponent是負責處理數據並且將Presentational 與 Redux連結起來。
有時候也些Component很難分辨是presentational component 還是 container component,比如有些form或是function會需要同時渲染UI又得處理數據,雖然在大型的專案中還是會將這種類型的Component拆成兩種組件,不過由於我們這個練習相對單純,所以目前保持混用。
input
與button
負責新增Todo到TodosList中。參考資料 :
從Redux 的作者學習它
Presentational and Container Components
React 與他的快樂小夥伴 Redux -基礎教學